home *** CD-ROM | disk | FTP | other *** search
/ PC Media 7 / PC MEDIA CD07.iso / share / prog / ooav3 / ooavarc.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1994-05-22  |  2.0 KB  |  92 lines

  1. {
  2.         Object-Oriented Archive-viewer: ARC-part
  3. }
  4.  
  5. unit OOAVArc;
  6.  
  7. interface
  8.  
  9. uses      Dos,OOAV;
  10.  
  11. Type      AFHeader = Record
  12.                  HeadId  : byte;
  13.                  DataType : byte;   { 0 = no more data }
  14.                  Name     : array[0..12] of char;
  15.                  CompSize : longint;
  16.                  FileDate : word;
  17.                  FileTime : word;
  18.                  Crc      : word;
  19.                  OrigSize : longint;
  20.                end;
  21.  
  22.  
  23. type      PArcArchive=^TArcArchive;
  24.           TArcArchive=object(TGeneralArchive)
  25.                         constructor Init;
  26.                         procedure FindFirst(var sr:SearchRec);virtual;
  27.                         procedure FindNext(var sr:SearchRec);virtual;
  28.                       private
  29.                         _FHdr:AFHeader;
  30.                         _SL:longint;
  31.                         procedure GetHeader(var sr:SearchRec);
  32.                       end;
  33.  
  34. implementation
  35.  
  36. const     BSize=4096;
  37. var       BUFF:array[1..BSize] of Byte;
  38.  
  39.  
  40.  
  41. constructor TArcArchive.Init;
  42. begin
  43.   FillChar(_FHdr,sizeof(_FHdr),0);
  44. end;
  45.  
  46.  
  47. procedure TArcArchive.GetHeader(var sr:SearchRec);
  48. var       bc:word;
  49.           b:byte;
  50. begin
  51.   FillChar(_FHdr,SizeOf(_FHdr),#0);
  52.   FillChar(BUFF,BSize,#0);
  53.   Seek(_FArchive,_SL);
  54.   BlockRead(_FArchive,BUFF,BSIZE,bc);
  55.   Move(BUFF[1],_FHdr,SizeOf(_FHdr));
  56.   with _FHdr do
  57.   begin
  58.     if DataType<>0 then
  59.     begin
  60.       b:=0;sr.Name:='';
  61.       while Name[b]<>#0 do
  62.       begin
  63.         if Name[b]='/' then
  64.           sr.Name:=''
  65.         else
  66.           sr.Name:=sr.Name+Name[b];
  67.         inc(b);
  68.       end;
  69.       sr.Size:=OrigSize;
  70.       if DataType=0 then sr.Size:=0;
  71.       sr.Time:=FileDate*longint(256*256)+FileTime;
  72.       inc(_SL,CompSize);
  73.       inc(_SL,sizeof(_FHDR));
  74.     end;
  75.   end;
  76. end;
  77.  
  78.  
  79. Procedure TArcArchive.FindFirst(var sr:SearchRec);
  80. begin
  81.  _SL:=0;
  82.  GetHeader(sr);
  83. end;
  84.  
  85.  
  86. procedure TArcArchive.FindNext(var sr:SearchRec);
  87. begin
  88.  GetHeader(sr);
  89. end;
  90.  
  91.  
  92. end.